<?php
namespace Foam\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\EventManager\EventManagerInterface;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;

class TableaudebordController extends AbstractActionController
{
    protected $familleTable;
    protected $ssfamilleTable;
    protected $produitTable;
    protected $carteTable;
    protected $carteproduitTable;
    
    public function setEventManager(EventManagerInterface $events)
    {
        parent::setEventManager($events);
 
        $controller = $this;
        $events->attach('dispatch', function ($e) use ($controller) {
            $controller->layout()->setTemplate('layout/foam');
        }, 100);
 
        return $this;
    }   
    
    public function getFamilleTable()
    {
        if (!$this->familleTable) {
            $sm = $this->getServiceLocator();
            $this->familleTable = $sm->get('Foam\Model\FamilleTable');
        }
        return $this->familleTable;
    }
    
    public function getssFamilleTable()
    {
        if (!$this->ssfamilleTable) {
            $sm = $this->getServiceLocator();
            $this->ssfamilleTable = $sm->get('Foam\Model\SousFamilleTable');
        }
        return $this->ssfamilleTable;
    }
    
    public function getProduitTable()
    {
        if (!$this->produitTable) {
            $sm = $this->getServiceLocator();
            $this->produitTable = $sm->get('Foam\Model\ProduitTable');
        }
        return $this->produitTable;
    }
    
    public function getCarteTable()
    {
        if (!$this->carteTable) {
            $sm = $this->getServiceLocator();
            $this->carteTable = $sm->get('Foam\Model\CarteTable');
        }
        return $this->carteTable;
    }
    
    public function getCarteProduitTable()
    {
        if (!$this->carteproduitTable) {
            $sm = $this->getServiceLocator();
            $this->carteproduitTable = $sm->get('Foam\Model\CarteProduitTable');
        }
        return $this->carteproduitTable;
    }
    
    public function indexAction()
    {
        return new ViewModel();
    }
    
    public function syntheseAction() {
        $latestCartes = $tabCartes = $tabProduits = $stylesFamilles = $stylesssFamilles = $stylesProduits = array();
        
        // Pour les cartes
        $cartes = $this->getCarteTable()->getLatestCarte();
        foreach($cartes as $carte){
            $latestCartes[] = $carte['libelle'];
        }
        
        // Pour les produits
        $produits = $this->getCarteProduitTable()->getCarteSynthese($latestCartes);
        foreach($produits as $produit) {
            $tabProduits[$produit['flibelle']][$produit['ssflibelle']][$produit['libelle']][$produit['clibelle']] = $produit['clibelle'];
        }
        
        // Pour les familles
        $familles = $this->getFamilleTable()->fetchAll();
        foreach($familles as $famille) {
            if($famille->couleur_fond != "" && $famille->couleur_bordure != "") {
                $stylesFamilles[$famille->libelle] = 'style="background:'.$famille->couleur_fond.';border-color:'.$famille->couleur_bordure.'"';
                $stylesProduits[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
            } elseif($famille->couleur_fond != "" && $famille->couleur_bordure == "") {
                $stylesFamilles[$famille->libelle] = 'style="background:'.$famille->couleur_fond.'"';
                $stylesProduits[$famille->libelle] = '';
            } elseif($famille->couleur_fond == "" && $famille->couleur_bordure != "") {
                $stylesFamilles[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
                $stylesProduits[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
            } else {
                $stylesFamilles[$famille->libelle] = '';
                $stylesProduits[$famille->libelle] = '';
            }
        }
        
        // Pour les sous-familles
        $ssfamilles = $this->getssFamilleTable()->fetchAll();
        foreach($ssfamilles as $ssfamille) {
            if($ssfamille->couleur_fond != "" && $ssfamille->couleur_bordure != "") {
                $stylesssFamilles[$ssfamille->libelle] = 'style="background:'.$ssfamille->couleur_fond.';border-color:'.$ssfamille->couleur_bordure.'"';
            } elseif($ssfamille->couleur_fond != "" && $ssfamille->couleur_bordure == "") {
                $stylesssFamilles[$ssfamille->libelle] = 'style="background:'.$ssfamille->couleur_fond.'"';
            } elseif($ssfamille->couleur_fond == "" && $ssfamille->couleur_bordure != "") {
                $stylesssFamilles[$ssfamille->libelle] = 'style="border-color:'.$ssfamille->couleur_bordure.'"';
            } else {
                $stylesssFamilles[$ssfamille->libelle] = '';
            }
        }
        
        $variables = array(
            'stylesssFamilles' => $stylesssFamilles,
            'stylesFamilles' => $stylesFamilles,
            'stylesProduits' => $stylesProduits,
            'produits' => $tabProduits,
            'cartes' => $latestCartes, 
        );
        
        $viewModel = new ViewModel();
        $viewModel->setVariables($variables);
        $viewModel->setTerminal(true);
        
        return $viewModel;
    }
    
    public function detailAction() {
        $request = $this->getRequest();
        $id_carte = 0;
        $tabProduits = $stylesFamilles = $stylesProduits = array();
        
        if ($request->isPost()) {
            // récupération de la carte du mois
            $carte = $this->getCarteTable()->getCarteFromDate($request->getPost()->month);
            $id_carte = $carte['id_carte'];

            // récupération des produits de la carte
            $produits = $this->getCarteProduitTable()->getCarteDetail($id_carte);
            foreach($produits as $produit){
                $tabProduits[$produit['flibelle']][$produit['libelle']] = $produit['direction'];
            }
        }
        
        // Pour les CSS dynamiques
        $familles = $this->getFamilleTable()->fetchAll();
        foreach($familles as $famille) {
            if($famille->couleur_fond != "" && $famille->couleur_bordure != "") {
                $stylesFamilles[$famille->libelle] = 'style="background:'.$famille->couleur_fond.';border-color:'.$famille->couleur_bordure.'"';
                $stylesProduits[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
            } elseif($famille->couleur_fond != "" && $famille->couleur_bordure == "") {
                $stylesFamilles[$famille->libelle] = 'style="background:'.$famille->couleur_fond.'"';
                $stylesProduits[$famille->libelle] = '';
            } elseif($famille->couleur_fond == "" && $famille->couleur_bordure != "") {
                $stylesFamilles[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
                $stylesProduits[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
            } else {
                $stylesFamilles[$famille->libelle] = '';
                $stylesProduits[$famille->libelle] = '';
            }
        }

        $variables = array(
            'produits' => $tabProduits, 
            'stylesFamilles' => $stylesFamilles,
            'stylesProduits' => $stylesProduits,
        );
        
        $viewModel = new ViewModel();
        $viewModel->setVariables($variables);
        $viewModel->setTerminal(true);
        
        return $viewModel;
    }
    
    public function retroAction() {
        $request = $this->getRequest();
        $id_carte = 0;
        $tabProduits = $stylesFamilles = $stylesProduits = array();
        
        if ($request->isPost()) {
            // récupération de la carte du mois
            $carte = $this->getCarteTable()->getCarteFromDate($request->getPost()->month);
            $id_carte = $carte['id_carte'];

            // récupération des produits de la carte
            $produits = $this->getCarteProduitTable()->getCarteDetail($id_carte);
            foreach($produits as $produit){
                $tabProduits[$produit['flibelle']][$produit['libelle']] = $produit['direction'];
            }
        }
        
        // Pour les CSS dynamiques
        $familles = $this->getFamilleTable()->fetchAll();
        foreach($familles as $famille) {
            if($famille->couleur_fond != "" && $famille->couleur_bordure != "") {
                $stylesFamilles[$famille->libelle] = 'style="background:'.$famille->couleur_fond.';border-color:'.$famille->couleur_bordure.'"';
                $stylesProduits[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
            } elseif($famille->couleur_fond != "" && $famille->couleur_bordure == "") {
                $stylesFamilles[$famille->libelle] = 'style="background:'.$famille->couleur_fond.'"';
                $stylesProduits[$famille->libelle] = '';
            } elseif($famille->couleur_fond == "" && $famille->couleur_bordure != "") {
                $stylesFamilles[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
                $stylesProduits[$famille->libelle] = 'style="border-color:'.$famille->couleur_bordure.'"';
            } else {
                $stylesFamilles[$famille->libelle] = '';
                $stylesProduits[$famille->libelle] = '';
            }
        }

        $variables = array(
            'produits' => $tabProduits, 
            'stylesFamilles' => $stylesFamilles,
            'stylesProduits' => $stylesProduits,
        );
        
        $viewModel = new ViewModel();
        $viewModel->setVariables($variables);
        $viewModel->setTerminal(true);
        
        return $viewModel;
    }
}